Talendでデータの正規化を行う
こんにちは。Yuraです。 Talendを使ってデータの正規化を行ってみました。
正規化用データ作成
はじめに正規化したいデータを用意します。 CSV形式で以下のような注文データを作成しました。
注文番号,明細番号,顧客ID,顧客名,商品ID,商品名,単価,数量,注文総額,出荷先住所,注文日時,出荷日次 o000000001,1,c000000001,顧客A,g000000001,商品A,100,5,2480,東京都千代田区,2016/05/21 12:25:00,2016/05/22 18:30:00 o000000001,2,c000000001,顧客A,g000000002,商品B,1980,1,2480,東京都千代田区,2016/05/21 12:25:00,2016/05/22 18:30:00 o000000002,1,c000000002,顧客B,g000000001,商品A,100,15,1500,東京都大田区,2016/05/22 17:24:00,2016/05/23 17:30:00 o000000003,1,c000000003,顧客C,g000000001,商品A,100,1,3370,東京都世田谷区,2016/05/23 19:25:00,2016/05/24 17:30:00 o000000003,2,c000000003,顧客C,g000000002,商品B,1980,1,3370,東京都世田谷区,2016/05/23 19:25:00,2016/05/24 17:30:00 o000000003,3,c000000003,顧客C,g000000003,商品C,430,3,3370,東京都世田谷区,2016/05/23 19:25:00,2016/05/24 17:30:00 o000000004,1,c000000001,顧客A,g000000003,商品C,430,3,1290,東京都千代田区,2016/05/24 18:45:00,
このデータを正規化すると、とりあえずは以下のような形になればよさそうです。 Talendを使ってデータをこの形になるように整形し、DBに登録するジョブを作成します。
Talendの実装
メタデータの定義
ジョブを作る前に読み込むCSVの情報をメタデータとして登録しておきましょう。 メタデータを定義しておけばコンポーネントごとに設定する手間が省けます。 メタデータ→区切り記号付きファイルから新規作成します。 名前を入れます。 ファイルパス、フォーマットを設定します。 CSVに合わせて設定します 1行目はヘッダーとして使うので、列名として先頭行を設定にチェックをいれます。 プレビューのリフレッシュをクリックします。
カラム名を設定して終わりです。
メタデータの設定が終わったらジョブを作成します。
ジョブ作成
まずは、TalendでCSVファイルを読み込む為に、tFileDelimitedInputコンポーネントを設置します。 プロパティファイルをリポジトリに設定して、先ほど作成したメタデータを選択します。
tMap、tNormalizeを配置して、rowでつなぎます。 ×マークがついてますがtMapコンポーネントを開き、正規化したテーブルの形になるように、マッピングをします。 下の例では、注文テーブルが作れるようにマッピングしています。 マッピングすれば、エラーは消えます。
tNormalizeコンポーネントのAdvanced settingsで重複を排除するにチェックを入れます。
次に、正規化したデータをMySQLに登録するために、tMySQLOutputを設置して、Rowでつなぎ、tMySQLのコンポーネントの設定をします。
あとは、同じように分割するテーブル分tMapでマッピングをします。
テーブル分の処理を作成したら、ジョブを実行してみて、DBにデータが登録されていることを確認します。
おわりに
実用性はあまりないかもしれませんが、Talendの使い道の一つとして参考になれば幸いです。 とはいえ、tNormalizeはともかく、tMapは便利なコンポーネントですので覚えておいて損はないと思います。